From 0f9c5b24fd05fdceca9776929040d1b036041898 Mon Sep 17 00:00:00 2001 From: Tim Starling Date: Fri, 27 Aug 2004 14:55:41 +0000 Subject: [PATCH] Abstracted site name in LanguageFi.php. This required the implementation of general handling for inflected languages, in particular the {{grammar:}} tag --- includes/GlobalFunctions.php | 15 +++++ includes/MagicWord.php | 1 + includes/Parser.php | 21 +++++-- languages/Language.php | 11 +++- languages/LanguageFi.php | 110 +++++++++++++++++++++++------------ languages/LanguageLatin1.php | 4 ++ 6 files changed, 117 insertions(+), 45 deletions(-) diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index a54497188a..d762933a8d 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -46,6 +46,21 @@ if( !function_exists('is_a') ) { } } +# UTF-8 substr function based on a PHP manual comment +if ( !function_exists( 'mb_substr' ) ) { + function mb_substr($str,$start) + { + preg_match_all("/./us", $str, $ar); + + if(func_num_args() >= 3) { + $end = func_get_arg(2); + return join("",array_slice($ar[0],$start,$end)); + } else { + return join("",array_slice($ar[0],$start)); + } + } +} + # html_entity_decode exists in PHP 4.3.0+ but is FATALLY BROKEN even then, # with no UTF-8 support. function do_html_entity_decode( $string, $quote_style=ENT_COMPAT, $charset='ISO-8859-1' ) { diff --git a/includes/MagicWord.php b/includes/MagicWord.php index efa11448b2..707e8a34ff 100644 --- a/includes/MagicWord.php +++ b/includes/MagicWord.php @@ -47,6 +47,7 @@ define('MAG_PAGENAME', 30); define('MAG_PAGENAMEE', 31); define('MAG_NAMESPACE', 32); define('MAG_TOC', 33); +define('MAG_GRAMMAR', 34); $wgVariableIDs = array( MAG_CURRENTMONTH, diff --git a/includes/Parser.php b/includes/Parser.php index f63eb67b5b..4c7ac8fe30 100644 --- a/includes/Parser.php +++ b/includes/Parser.php @@ -1422,11 +1422,12 @@ class Parser # PHP global rebinding syntax is a bit weird, need to use the GLOBALS array $GLOBALS['wgCurParser'] =& $this; - - if ( $this->mOutputType == OT_HTML ) { + if ( $this->mOutputType == OT_HTML || $this->mOutputType == OT_MSG ) { # Variable substitution $text = preg_replace_callback( "/{{([$nonBraceChars]*?)}}/", 'wfVariableSubstitution', $text ); - + } + + if ( $this->mOutputType == OT_HTML ) { # Argument substitution $text = preg_replace_callback( "/(\\n?){{{([$titleChars]*?)}}}/", 'wfArgSubstitution', $text ); } @@ -1599,6 +1600,15 @@ class Parser $this->mOutput->mContainsOldMagic = true; } + # GRAMMAR + if ( !$found && $argc == 1 ) { + $mwGrammar =& MagicWord::get( MAG_GRAMMAR ); + if ( $mwGrammar->matchStartAndRemove( $part1 ) ) { + $text = $wgLang->convertGrammar( $args[0], $part1 ); + $found = true; + } + } + # Template table test # Did we encounter this template already? If yes, it is in the cache @@ -1681,8 +1691,9 @@ class Parser $wgLinkCache->addLinkObj( $title ); } } - # Empties the template path - $this->mTemplatePath = array(); + + # Empties the template path + $this->mTemplatePath = array(); if ( !$found ) { return $matches[0]; diff --git a/languages/Language.php b/languages/Language.php index 6807d4d322..bd5c03af8a 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -206,7 +206,8 @@ $wgLanguageNamesEn =& $wgLanguageNames; MAG_NS => array( 0, 'NS:' ), MAG_LOCALURL => array( 0, 'LOCALURL:' ), MAG_LOCALURLE => array( 0, 'LOCALURLE:' ), - MAG_SERVER => array( 0, 'SERVER' ) + MAG_SERVER => array( 0, 'SERVER' ), + MAG_GRAMMAR => array( 0, 'GRAMMAR:' ) ); #------------------------------------------------------------------- @@ -1925,10 +1926,16 @@ class Language { return $ellipsis . $string; } } + + # Grammatical transformations, needed for inflected languages + # Invoked by putting {{grammar:case|word}} in a message + function convertGrammar( $word, $case ) { + return $word; + } } # This should fail gracefully if there's not a localization available -@include_once( 'Language' . ucfirst( $wgLanguageCode ) . '.php' ); +include_once( 'Language' . ucfirst( $wgLanguageCode ) . '.php' ); } ?> diff --git a/languages/LanguageFi.php b/languages/LanguageFi.php index 0e4a3f5468..6d1e193da2 100644 --- a/languages/LanguageFi.php +++ b/languages/LanguageFi.php @@ -17,8 +17,8 @@ 1 => "Keskustelu", 2 => "Käyttäjä", 3 => "Keskustelu_käyttäjästä", - 4 => "Wikipedia", - 5 => "Keskustelu_Wikipediasta", + 4 => $wgMetaNamespace, + 5 => "{$wgMetaNamespace}-keskustelu", 6 => "Kuva", 7 => "Keskustelu_kuvasta", 8 => "MediaWiki", @@ -26,7 +26,7 @@ 10 => "Template", 11 => "Template_talk" -); +) + $wgNamespaceNamesEn; /* private */ $wgQuickbarSettingsFi = array( "Ei mitään", "Tekstin mukana, vasen", "Tekstin mukana, oikea", @@ -151,17 +151,17 @@ "linktrail" => "/^((?:ä|ö|[a-z])+)(.*)\$/sD", "mainpage" => "Etusivu", "about" => "Tietoja", -"aboutwikipedia" => "Tietoja Wikipediasta", -"aboutpage" => "Wikipedia:Tietoja", +"aboutwikipedia" => "Tietoja {{grammar:elative|{{SITENAME}}}}", +"aboutpage" => "{{ns:project}}:Tietoja", "help" => "Ohje", -"helppage" => "Wikipedia:Ohje", -"wikititlesuffix" => "Wikipedia", +"helppage" => "{{ns:project}}:Ohje", +"wikititlesuffix" => "{{ns:project}}", "bugreports" => "Bugiraportit", -"bugreportspage" => "Wikipedia:Bugiraportit", +"bugreportspage" => "{{ns:project}}:Bugiraportit", "faq" => "FAQ", -"faqpage" => "Wikipedia:FAQ", +"faqpage" => "{{ns:project}}:FAQ", "edithelp" => "Muokkausohjeet", -"edithelppage" => "Wikipedia:Kuinka_sivuja_muokataan", +"edithelppage" => "{{ns:project}}:Kuinka_sivuja_muokataan", "cancel" => "Keskeytä", "qbfind" => "Etsi", "qbbrowse" => "Selaa", @@ -200,7 +200,7 @@ "gnunote" => "Kaikki teksti on saatavilla GNU Free Documentation -lisenssin ehdoilla.", "printsubtitle" => "(Lähde: http://fi.wikipedia.org)", "protectedpage" => "Suojattu sivu", -"administrators" => "Wikipedia:Ylläpitäjät", +"administrators" => "{{ns:project}}:Ylläpitäjät", "sysoptitle" => "Vaatii ylläpitäjä-oikeudet", "sysoptext" => "Tämän toiminnon voi suorittaa vain käyttäjä, jolla on \"ylläpitäjä\"-oikeudet. Katso $1.", @@ -239,7 +239,7 @@ MySQL palautti virheen \"$3: $4\".", "nodb" => "Tietokantaa $1 ei voitu valita", "readonly" => "Tietokanta on lukittu", "enterlockreason" => "Anna syy lukitukselle sekä arvio lukituksen poistamisajankohdalle.", -"readonlytext" => "Wikipedian tietokanta on tällä hetkellä lukittu. +"readonlytext" => "{{grammar:genitive|{{SITENAME}}}} tietokanta on tällä hetkellä lukittu. Uusia artikkeleita tai muita muutoksia ei voi tehdä. Syynä ovat todennäköisimmin rutiininomaiset tietokannan ylläpitotoimet. Tietokannan lukinneen ylläpitäjän selitys: @@ -262,8 +262,8 @@ Tietokannan lukinneen ylläpitäjän selitys: # Login and logout pages # "logouttitle" => "Käyttäjän uloskirjautuminen", -"logouttext" => "Olet nyt kirjautunut ulos Wikipediasta. -Voit jatkaa Wikipedian käyttöä nimettömänä, tai +"logouttext" => "Olet nyt kirjautunut ulos {{grammar:elative|{{SITENAME}}}}. +Voit jatkaa {{grammar:genitive|{{SITENAME}}}} käyttöä nimettömänä, tai kirjautua uudelleen sisään samana tai eri käyttäjänä.\n", "welcomecreation" => "

Tervetuloa, $1!

@@ -293,14 +293,14 @@ Käyttäjätunnuksesi on luotu. "loginerror" => "Sisäänkirjautumisvirhe", "noname" => "Et ole määritellyt kelvollista käyttäjänimeä.", "loginsuccesstitle" => "Sisäänkirjoittautuminen onnistui", -"loginsuccess" => "Olet nyt kirjautunut Wikipediaan käyttäjänä \"$1\".", +"loginsuccess" => "Olet nyt kirjautunut {{grammar:illative|{{SITENAME}}}} käyttäjänä \"$1\".", "nosuchuser" => "Käyttäjänimeä \"$1\" ei ole olemassa. Tarkista kirjoititko nimen oikein, tai käytä alla olevaa lomaketta uuden käyttäjätunnuksen luomiseksi.", "wrongpassword" => "Syöttämäsi salasana ei ole oikein. Ole hyvä ja yritä uudelleen.", "mailmypassword" => "Lähetä minulle uusi salasana sähköpostilla", -"passwordremindertitle" => "Salasanamuistutus Wikipediasta", +"passwordremindertitle" => "Salasanamuistutus {{grammar:elative|{{SITENAME}}}}", "passwordremindertext" => "Joku (todennäköisesti sinä), IP-osoitteesta $1 -pyysi Wikipediaa lähettämään uuden salasanan. +pyysi {{grammar:partitive|{{SITENAME}}}} lähettämään uuden salasanan. Salasana käyttäjälle \"$2\" on nyt \"$3\". Kirjaudu sisään ja vaihda heti salasanasi.", "noemail" => "Käyttäjälle \"$1\" ei ole määritelty sähköpostiosoitetta.", @@ -317,9 +317,9 @@ sähköpostiosoitteeseen. Kirjaudu sisään uudestaan, kun olet saanut sen.", "blockedtitle" => "Pääsy käyttäjältä estetty", "blockedtext" => "$1 on estänyt pääsysi Wikpediaan joko käyttäjänimesi tai IP-osoitteesi perusteella. Syynä tähän on:
''$2''

Ota yhteyttä henkilöön $1 tai johonkuhun -muuhun [[Wikipedia:ylläpitäjät|ylläpitäjään]] keskustellaksesi estosta.", +muuhun [[{{ns:project}}:ylläpitäjät|ylläpitäjään]] keskustellaksesi estosta.", "newarticle" => "(uusi)", -"newarticletext" => "Olet seurannut linkkiä sivulle, jota ei ole vielä olemassa.Luodaksesi sivun, kirjoita alla olevaan laatikkoon (katso [[Wikipedia:Ohje|ohjeesta]] lisätietoja). Jos tarkoituksesi ei ole luoda uutta sivua, paina selaimesi '''back'''-painiketta.", +"newarticletext" => "Olet seurannut linkkiä sivulle, jota ei ole vielä olemassa.Luodaksesi sivun, kirjoita alla olevaan laatikkoon (katso [[{{ns:project}}:Ohje|ohjeesta]] lisätietoja). Jos tarkoituksesi ei ole luoda uutta sivua, paina selaimesi '''back'''-painiketta.", "anontalkpagetext" => "----\n''Tämä on nimettömän käyttäjän keskustelusivu. Hän ei ole joko luonut itselleen käyttäjätunnusta tai ei käytä sitä. Siksi hänet tunnistetaan nyt numeerisella [[IP-osoite|IP-osoitteella]]. Kyseinen IP-osoite voi olla useamman henkilön käytössä. Jos olet nimetön käyttäjä, ja sinusta tuntuu, että merkityksettömiä kommentteja on ohjattu sinulle, [[Erikoissivut:Sisäänkirjautuminen|luo itsellesi käyttäjätunnus tai kirjaudu sisään]] välttääksesi jatkossa sekaannukset muiden nimettömien käyttäjien kanssa.''", "noarticletext" => "(Tällä sivulla ei ole vielä tekstiä)", "updated" => "(Päivitetty)", @@ -338,7 +338,7 @@ Sinun täytyy yhdistää muutoksesi olemassa olevaan tekstiin. "editingold" => "VAROITUS: Olet muokkaamassa vanhentunutta versiota tämän sivun tekstistä. Jos tallennat sen, kaikki tämän version jälkeen tehdyt muutokset katoavat.\n", "yourdiff" => "Eroavaisuudet", -"copyrightwarning" => "Huomaa, että kaikki Wikipediaan tehtävät tuotokset +"copyrightwarning" => "Huomaa, että kaikki {{grammar:illative|{{SITENAME}}}} tehtävät tuotokset katsotaan julkaistuksi GNU Free Documentation -lisenssin mukaisesti (katso sivulta $1 yksityiskohtia). Jos et halua, että kirjoitustasi muokataan armottomasti ja uudelleenkäytetään vapaasti, älä tallenna kirjoitustasi.
@@ -444,13 +444,13 @@ välinen aikaero tunteina.", # "changes" => "muutokset", "recentchanges" => "Tuoreet muutokset", -"recentchangestext" => "Tältä sivulta voi seurata tuoreita Wikipediaan tehtyjä muutoksia. -[[Wikipedia:Tervetuloa Wikipediaan|Tervetuloa Wikipediaan!]] -Katso seuraavia sivuja: [[Wikipedia:Kysymyksiä ja vastauksia Wikipediasta|Useimmin kysyttyjä asioita]], [[Wikipedia:Sääntöjä ja ohjeita|Wikipedian säännöt]] -(erityisesti [[Wikipedia:Merkitsemiskäytäntöjä|Merkitsemiskäytännöt]], -[[Wikipedia::Neutraali näkökulma|Neutraali näkökulma]]), -ja [[Wikipedia:Aloittelijan virheitä|Aloittelijan virheitä]]. -Jos haluat nähdä Wikipedian onnistuvan, on erittäin tärkeää, että et lisää materiaalia, +"recentchangestext" => "Tältä sivulta voi seurata tuoreita {{grammar:illative|{{SITENAME}}}} tehtyjä muutoksia. +[[{{ns:project}}:Tervetuloa {{grammar:illative|{{SITENAME}}}}|Tervetuloa {{grammar:illative|{{SITENAME}}}}!]] +Katso seuraavia sivuja: [[{{ns:project}}:Kysymyksiä ja vastauksia {{grammar:elative|{{SITENAME}}}}|Useimmin kysyttyjä asioita]], [[{{ns:project}}:Sääntöjä ja ohjeita|{{grammar:genitive|{{SITENAME}}}} säännöt]] +(erityisesti [[{{ns:project}}:Merkitsemiskäytäntöjä|Merkitsemiskäytännöt]], +[[{{ns:project}}:Neutraali näkökulma|Neutraali näkökulma]]), +ja [[{{ns:project}}:Aloittelijan virheitä|Aloittelijan virheitä]]. +Jos haluat nähdä {{grammar:genitive|{{SITENAME}}}} onnistuvan, on erittäin tärkeää, että et lisää materiaalia, jonka käyttöä rajoittavat [[Wikipedia ja Tekijänoikeudet|tekijänoikeudet]]. Oikeudelliset seuraukset voivat vahingoittaa projektia vakavasti, joten kunnioita muiden tekijänoikeuksia. Katso myös [http://meta.wikipedia.org/wiki/Special:Recentchanges recent meta discussion].", @@ -485,7 +485,7 @@ tallentaaksesi tiedoston.", "uploadfile" => "Tallenna tiedosto", "uploaderror" => "Tallennusvirhe", "uploadtext" => "'''SEIS!''' Ennen kuin tallennat tänne, -tutustu ja seuraa Wikipedian [[Project:Kuvien käyttösäännöt|kuvienkäyttösääntöihin]]. +tutustu ja seuraa {{grammar:genitive|{{SITENAME}}}} [[Project:Kuvien käyttösäännöt|kuvienkäyttösääntöihin]]. Näyttääksesi tai etsiäksesi aiemmin tallennettuja kuvia, katso [[Erityissivut:Luettelo kuvista|luetteloa tallennetuista kuvista]]. @@ -508,7 +508,7 @@ Liittääksesi kuvan artikkeliin käytä seuraavan muotoista linkkiä '''[[Kuva:tiedosto.png|kuvausteksti]]''' tai '''[[media:tiedosto.ogg]]''' äänille.. -Huomaa, että Wikipedian sivuilla muut voivat muokata tai poistaa tallentamasi +Huomaa, että {{grammar:genitive|{{SITENAME}}}} sivuilla muut voivat muokata tai poistaa tallentamasi tiedoston, jos he katsovat, että se ei palvele tietosanakirjan tarpeita, ja sinun tallentamismahdollisuutesi voidaan estää, jos väärinkäytät järjestelmää.", "uploadlog" => "Tallennusloki", @@ -522,7 +522,7 @@ Kaikki ajat näytetään palvelimen aikoina (UTC). "filedesc" => "Yhteenveto", "affirmation" => "Lupaan, että tämän tiedoston tekijänoikeuksien haltija sallii sen käytön $1 lisenssin mukaisesti.", -"copyrightpage" => "Wikipedia:Wikipedia ja tekijänoikeudet", +"copyrightpage" => "{{ns:project}}:Wikipedia ja tekijänoikeudet", "copyrightpagename" => "Wikipedia ja tekijänoikeudet", "uploadedfiles" => "Tallennetut tiedostot", "noaffirmation" => "Vahvista, ettei lähettämäsi tiedosto riko tekijänoikeuksia.", @@ -572,7 +572,7 @@ tämä vanha versio, (palauta) = palauta kuva tähän vanhaan versioon. "sitestats" => "Sivuston tilastoja", "userstats" => "Käyttäjätilastoja", "sitestatstext" => "Tietokannassa on yhteensä $1 sivua. -Tähän on laskettu mukaan keskustelusivut, Wikipediasta kertovat sivut, +Tähän on laskettu mukaan keskustelusivut, {{grammar:elative|{{SITENAME}}}} kertovat sivut, lyhyet \"tynkäsivut\", uudelleenohjaukset sekä muita sivuja joita ei voi pitää kunnollisina artikkeleina. Nämä poislukien tietokannassa on $2 sivua joita voidaan todennäköisesti pitää oikeina artikkeleina.

@@ -589,7 +589,7 @@ Keskimäärin sivua on muokattu $5 kertaa, ja muokkausta kohden sivua on "maintenancebacklink" => "Takaisin ylläpitosivulle", "disambiguations" => "Tarkennussivu", -"disambiguationspage" => "Wikipedia:Linkkejä_tarkennussivuihin", +"disambiguationspage" => "{{ns:project}}:Linkkejä_tarkennussivuihin", "disambiguationstext" => "Seuraavat artikkelit linkittävät tarkennussivuun. Sen sijasta niiden pitäisi linkittää asianomaiseen aiheeseen.
Sivua kohdellaan tarkennussivuna jos siihen on linkki sivulta $1.
Linkkejä muihin nimiavaruuksiin ei ole listattu tässä.", "doubleredirects" => "Kaksinkertaiset uudelleenohjaukset", "doubleredirectstext" => "Huomio: Tässä listassa saattaa olla virheitä. Yleensä kyseessä on sivu, jossa ensimmäisen #REDIRECT:in jälkeen on tekstiä.
\nJokaisella rivillä on linkit ensimmäiseen ja toiseen uudelleenohjaukseen sekä toisen uudelleenohjauksen kohteen ensimmäiseen riviin, eli yleensä \"oikeaan\" kohteeseen, johon ensimmäisen uudelleenohjauksen pitäisi osoittaa.", @@ -685,7 +685,7 @@ Tulevaisuudessa sivuun ja sen keskustelusivuun tehtävät muutokset listataan t "confirm" => "Vahvista", "confirmdelete" => "Vahvista poisto", "deletesub" => "(Poistetaan \"$1\")", -"confirmdeletetext" => "Olet tuhoamassa pysyvästi sivun tai kuvan ja kaiken sen historian tietokannasta. Vahvista, että todella aiot tehdä näin ja että ymmärrät seuraukset, sekä että teet tämän [[Wikipedia:Policy|Wikipedian käytännön]] mukaisesti.", +"confirmdeletetext" => "Olet tuhoamassa pysyvästi sivun tai kuvan ja kaiken sen historian tietokannasta. Vahvista, että todella aiot tehdä näin ja että ymmärrät seuraukset, sekä että teet tämän [[{{ns:project}}:Policy|{{grammar:genitive|{{SITENAME}}}} käytännön]] mukaisesti.", "confirmcheck" => "Kyllä, haluan varmasti poistaa tämän.", "actioncomplete" => "Toiminta suoritettu", "deletedtext" => "\"$1\" on poistettu. @@ -720,7 +720,7 @@ ja olemassa olevaa versiota ei korvata automaattisesti.", "undeletebtn" => "Palauta!", "undeletedarticle" => "palautettiin \"$1\"", "undeletedtext" => "Artikkeli [[$1]] on palautettu onnistuneesti. -Lista viimeisimmistä poistoista ja palautuksista on sivulla [[Wikipedia:poistoloki]].", +Lista viimeisimmistä poistoista ja palautuksista on sivulla [[{{ns:project}}:poistoloki]].", # Contributions # @@ -745,7 +745,7 @@ Lista viimeisimmistä poistoista ja palautuksista on sivulla [[Wikipedia:poistol # Block/unblock IP # "blockip" => "Aseta muokkausesto", -"blockiptext" => "Käytä allaolevaa lomaketta estämään kirjoitusoikeudet tietyltä IP-osoitteelta. Näin pitäisi tehdä vain vandalismin estämiseksi, ja samalla on noudatettava [[Wikipedia:Policy|Wikipedian käytäntöjä]]. +"blockiptext" => "Käytä allaolevaa lomaketta estämään kirjoitusoikeudet tietyltä IP-osoitteelta. Näin pitäisi tehdä vain vandalismin estämiseksi, ja samalla on noudatettava [[{{ns:project}}:Policy|{{grammar:genitive|{{SITENAME}}}} käytäntöjä]]. Ilmoita syy alapuolella (esimerkiksi lista vandalisoiduista sivuista).", "ipaddress" => "IP-osoite", "ipbreason" => "Syy", @@ -785,12 +785,12 @@ Ilmoita syy alapuolella (esimerkiksi lista vandalisoiduista sivuista).", # SQL query # "asksql" => "SQL-kysely", -"asksqltext" => "Käytä allaolevaa lomaketta tehdäksesi suoria kyselyitä Wikipedian tietokannasta. +"asksqltext" => "Käytä allaolevaa lomaketta tehdäksesi suoria kyselyitä {{grammar:genitive|{{SITENAME}}}} tietokannasta. Merkkijonovakioita merkitään yksinkertaisilla lainausmerkeillä ('näin'). Kyselyt voivat usein kuormittaa palvelinta pahastikin, joten käytä tätä toimintoa säästeliäästi.", "sqlquery" => "Kirjoita kysely", "querybtn" => "Lähetä kysely", -"selectonly" => "Vain Wikipedian kehittäjät voivat tehdä muita kuin \"SELECT\"-hakuja.", +"selectonly" => "Vain {{grammar:genitive|{{SITENAME}}}} kehittäjät voivat tehdä muita kuin \"SELECT\"-hakuja.", "querysuccessful" => "Kysely onnistui", # Move page @@ -833,6 +833,10 @@ Näissä tapauksissa sivut täytyy siirtää tai yhdistää käsin.", require_once( "LanguageUtf8.php" ); class LanguageFi extends LanguageUtf8 { + /*function LanguageFi() { + global $wgNamespaceNamesFi, $wgMetaNamespace; + $wgNamespaceNamesFi[NS_WP_TALK] = 'Keskustelu_' . $this->convertGrammar( $wgMetaNamespace, 'elative' ); + }*/ function getNamespaces() { global $wgNamespaceNamesFi; @@ -913,8 +917,38 @@ class LanguageFi extends LanguageUtf8 { function getMessage( $key ) { global $wgAllMessagesFi; - return $wgAllMessagesFi[$key]; + return @$wgAllMessagesFi[$key]; } + # Convert from the nominative form of a noun to some other case + # Invoked with {{grammar:case|word}} + function convertGrammar( $word, $case ) { + # These rules are not perfect, but they are currently only used for site names so it doesn't + # matter if they are wrong sometimes. Just add a special case for your site name if necessary. + switch ( $case ) { + case 'genitive': + $word = "{$word}n"; + break; + case 'elative': + if ( mb_substr($word, -1) == 'y' ) { + $word = "{$word}stä"; + } else { + $word = "{$word}sta"; + } + break; + case 'partitive': + if ( mb_substr($word, -1) == 'y' ) { + $word = "{$word}ä"; + } else { + $word = "{$word}a"; + } + break; + case 'illative': + # Double the last letter and add "n" + # mb_substr has a compatibility function in GlobalFunctions.php + $word = $word . mb_substr($word,-1) . 'n'; + } + return $word; + } } ?> diff --git a/languages/LanguageLatin1.php b/languages/LanguageLatin1.php index 55c62fcbcb..109c25161b 100644 --- a/languages/LanguageLatin1.php +++ b/languages/LanguageLatin1.php @@ -251,6 +251,10 @@ class LanguageLatin1 { function truncate( $string, $length, $ellipsis = "" ) { return Language::truncate( $string, $length, $ellipsis ); } + + function convertGrammar( $word, $case ) { + return $word; + } } ?> -- 2.20.1